package com.fulu.javabase.classloadprocess;

/**
 * 类的初始化<clinit>:
 * 1.静态变量和静态代码块按顺序执行
 *   j = method();
 *   static 静态代码块
 *
 * 实例初始化过程<init>
 * 1.super() 无
 * 2.父类的非静态变量和非静态代码块顺序执行
 *   i = test()
 *   非静态代码块
 * 3.父类构造器
 *
 * 费静态方法test()，前面有一个this对象
 * this对象表示的是当前正在创建的对象，因为当前正在创建Son对象
 * 所以this.test()执行的是子类重写的test()方法（面向对象多态）
 *
 * 哪些方法不能被重写
 * private
 * final
 * static
 */
public class Father {
    // 非静态变量
    private int i = test();
    // 静态变量
    private static int j = method();

    // 静态代码块
    static {
        System.out.println("1父类静态代码块");
    }

    // 构造器
    Father(){
        System.out.println("2父类构造器");
    }

    // 费静态代码块
    {
        System.out.println("3父类非静态代码块");
    }

    public static int method() {
        System.out.println("4父类静态变量");
        return 0;
    }

    public int test() {
        System.out.println("5父类非静态变量");
        return 1;
    }
}
